前言:
- 定义;
- 常用的元字符;
- 常用的限定符(量词);
- 分组;
- 正则高级 API(4个);
- r 的作用;
- 贪婪/非贪婪。
一、定义
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。
简而言之:正则表达式就是记录文本规则的代码。
特点:
操作字符串
1.更快的方式操作字符串;(表单校验,数据匹配…)
2.普通字符串操作无法做到的,或者很难做的正则很容易搞定!!!
使用场景:
1.表单校验
2.api 里面也需要正则
正则表达式代码体验
# Python 解释器为我们提供了一个使用正则的模块,这个模块叫做re(regex) |
二、常用的元字符
语法 | 说明 |
---|---|
. | 匹配除换行符(\n)以外的任意字符 |
[] | 匹配 [ ] 中列举的字符 |
\w 与 \W | 匹配字母或数字或下划线或汉字(单词) / 反义(非单词) |
\s 与 \S | 匹配任意的空白符 / 反义(非空白) |
\d 与 \D | 匹配数字 [0-9] / 反义(非数字) |
\b 与 \B | 匹配单词的开始或结束 / 反义 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
代码演示:
# . 匹配任意1个字符(除了 \n) |
三、常用的限定符(量词)
语法 | 说明 | 备注 |
---|---|---|
* | 重复零次或更多次 | >=0 |
+ | 重复一次或更多次 | >=1 |
? | 重复零次或一次 | 0 or 1 |
{n} | 重复n次 | ==n |
{n,} | 重复n次或更多次 | >=n |
{n,m} | 重复n到m次 | n<=X<=m |
代码演示:
# * 匹配前一个字符出现0次或者无限次,即可有可无 (>=0) |
案例:
1.校验手机号
import re |
2.校验邮箱
import re |
四、分组
用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作。
语法 | 说明 |
---|---|
(abc) | 将括号中字符作为一个分组 |
竖线 | 匹配左右任意一个表达式 |
\num | 引用分组num匹配到的字符串 |
(?P |
分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
代码演示:
# (abc) 将括号中字符作为一个分组 |
五、正则高级 API(4个)
语法 | 说明 |
---|---|
search() | 搜索字符串中符合正则表达式的内容 -> 只返回第一个 |
findall() | 搜索字符串中符合正则表达式的内容 -> 返回一个列表 |
sub() | 替换字符串中符合正则的内容 -> 替换后的字符串 |
split() | 按照指定正则切割字符串 -> 返回列表 |
代码演示:
import re |
六、r 的作用
让程序把正则直接当做正则看;(不是从字符串开始解释)
# c:\aaa\bbb\ccc |
七、贪婪/非贪婪
贪婪:(量词在自己的范围内,取最多…)
非贪婪:(量词在自己的范围内,取最少… )
非贪婪用法:量词后面加?
print('贪婪', re.match(r'a+', 'aaa').group()) # -> aaa |
更多参考内容: http://deerchao.net